const { contextBridge, ipcRenderer } = require('electron');

// 暴露安全的API给渲染进程
contextBridge.exposeInMainWorld('electronAPI', {
  // 窗口控制
  minimizeWindow: () => ipcRenderer.invoke('minimize-window'),
  maximizeWindow: () => ipcRenderer.invoke('maximize-window'),
  closeWindow: () => ipcRenderer.invoke('close-window'),
  // 页面加载完成通知
  notifyPageLoaded: () => ipcRenderer.invoke('page-loaded'),
  // 打开预览子窗口（模态）
  openPreviewWindow: (payload) => ipcRenderer.invoke('open-preview-window', payload),
  // 用户登录验证
  validateLogin: (username, password) => ipcRenderer.invoke('user:validate-login', username, password),
  // 获取当前登录用户信息
  getCurrentUser: () => ipcRenderer.invoke('user:get-current-user'),
  // 读取文件并获取 Blob（根据记录类型、记录ID、文件名）
  getFileBlob: async (recordType, recordId, fileName) => {
    try {
      const result = await ipcRenderer.invoke('file:read-blob', recordType, recordId, fileName);
      if (result && result.data) {
        // 将数组转换为 Uint8Array，然后创建 Blob
        const uint8Array = new Uint8Array(result.data);
        const blob = new Blob([uint8Array], { type: result.mimeType });
        // 创建一个类似 File 的对象
        return {
          name: result.fileName,
          size: result.size,
          type: result.mimeType,
          // 添加一个方法用于创建 File 对象
          toFile: () => new File([blob], result.fileName, { type: result.mimeType })
        };
      }
      return null;
    } catch (error) {
      console.error('获取文件 Blob 失败:', error);
      return null;
    }
  },
  // 获取文件完整路径（根据记录类型、记录ID、文件名）
  getFilePath: async (recordType, recordId, fileName) => {
    try {
      return await ipcRenderer.invoke('file:get-path', recordType, recordId, fileName);
    } catch (error) {
      console.error('获取文件路径失败:', error);
      return null;
    }
  },
  // 期刊论文数据库操作
  getJournalPapers: (conditions = {}, pagination = null) => ipcRenderer.invoke('db:get-journal-papers', conditions, pagination),
  getJournalPaperById: (id) => ipcRenderer.invoke('db:get-journal-paper-by-id', id),
  createJournalPaper: (data) => ipcRenderer.invoke('db:create-journal-paper', data),
  updateJournalPaper: (id, data) => ipcRenderer.invoke('db:update-journal-paper', id, data),
  deleteJournalPaper: (id) => ipcRenderer.invoke('db:delete-journal-paper', id),
  searchJournalPapers: (keyword) => ipcRenderer.invoke('db:search-journal-papers', keyword),
  getJournalPaperStats: () => ipcRenderer.invoke('db:get-journal-paper-stats'),
  // 保存文件到持久化目录
  saveFile: async (file, recordType, recordId, uploadAreaKey) => {
    try {
      // 将 File 对象转换为 Buffer，然后转换为数组以便通过 IPC 传输
      const arrayBuffer = await file.arrayBuffer();
      const buffer = Buffer.from(arrayBuffer);
      
      const fileData = {
        name: file.name,
        buffer: Array.from(buffer), // 转换为数组以便通过 IPC 传输
        size: file.size,
        type: file.type
      };
      
      const result = await ipcRenderer.invoke('file:save', fileData, recordType, recordId, uploadAreaKey);
      return result;
    } catch (error) {
      console.error('保存文件失败:', error);
      throw error;
    }
  },
  // 删除文件（通过记录类型、记录ID、文件名）
  deleteFile: (recordType, recordId, fileName) => ipcRenderer.invoke('file:delete-by-name', recordType, recordId, fileName),
  // 移动文件
  moveFile: (oldFilePath, newRecordType, newRecordId) => ipcRenderer.invoke('file:move', oldFilePath, newRecordType, newRecordId),
});
